package com.pllandxzx.controller;

import com.pllandxzx.service.WebSocketService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * WebSocket相关功能的RESTful接口控制器
 * 提供获取在线用户、发送消息等WebSocket相关操作的API
 */
@RestController
@RequestMapping("/websocket")
public class WebSocketController {

    @Autowired
    private WebSocketService webSocketService;

    /**
     * 获取当前在线用户信息
     * @return 包含在线用户数和用户列表的Map对象
     */
    @GetMapping("/online-users")
    public Map<String, Object> getOnlineUsers() {
        return webSocketService.getOnlineUserInfo();
    }

    /**
     * 向特定用户发送消息
     * @param userId 接收消息的用户ID
     * @param message 要发送的消息内容
     * @return 操作结果描述
     */
    @PostMapping("/send-to-user")
    public String sendMessageToUser(@RequestParam("userId") String userId, @RequestParam("message") String message) {
        boolean success = webSocketService.sendMessageToUser(userId, message);
        return success ? "消息发送成功" : "用户不在线，消息发送失败";
    }

    /**
     * 广播消息给所有在线用户
     * @param message 要广播的消息内容
     * @return 操作结果描述
     */
    @PostMapping("/broadcast")
    public String broadcastMessage(@RequestParam String message) {
        webSocketService.broadcastMessage(message);
        return "广播消息发送成功";
    }

    /**
     * 发送私聊消息（从指定用户到另一用户,即用户A与用户B之前的通信）
     * @param fromUserId 发送者用户ID
     * @param toUserId 接收者用户ID
     * @param message 要发送的消息内容
     * @return 操作结果描述
     */
    @PostMapping("/private-message")
    public String sendPrivateMessage(@RequestParam String fromUserId,
                                     @RequestParam String toUserId,
                                     @RequestParam String message) {
        webSocketService.sendPrivateMessage(fromUserId, toUserId, message);
        return "私聊消息发送成功";
    }
}